package problemas.cap2;

public class RoigJimenez {

	/**
	 * Pre: T!=null
	 * Post: sonIguales(T,dato) = (NUM alfa EN [0,T.length-1].T[alfa].equals(dato)
	 */
	public static <D> int sonIguales (D[] T, D dato) {
		return sonIguales(T,dato,0,0);	
	}

	/**
	 * Pre: T!=null ^ i > 0 ^ parcial = (NUM alfa EN [0,i].T[alfa].equals(dato)
	 * Post: sonIguales(T,dato,parcial,i) = (NUM alfa EN [0,T.length-1].T[alfa].equals(dato)
	 */
	public static <D> int sonIguales (D[] T, D dato,int parcial, int i) {
		int igual = 0;

		if (T[i] == dato) {
			igual = 1;
		}

		if (i > (T.length - 1)) {
			return parcial;  //??
		}
		else {
			return (igual + sonIguales(T, dato, parcial, i + 1));
		}
	}

	/**
	 * Pre: T!=null ^ (PT alfa EN [0,T.length-1].T[alfa] != null)
	 * Post: estaOrdenada(T) = (PT alfa EN [0,T.length-2].P(T[alfa] <= T[alfa + 1]) 
	 */
	public static <C extends Comparable <C>> boolean estaOrdenada (C[] T) {
		return estaOrdenada(T, 0);
	}

	/**
	 * Pre: T!=null ^ (PT alfa EN [0,T.length-1].T[alfa] != null) ^ i >= 0
	 * Post: estaOrdenada(T,i) = (PT alfa EN [i,T.length-2].P(T[alfa] <= T[alfa + 1]) 
	 */
	public static <C extends Comparable <C>> boolean estaOrdenada (C[] T, int i) {
		if(i > T.length - 1) {
			return true;
		}
		else {
			return ((T[i].compareTo(T[i+1]) < 0) && estaOrdenada(T, i+1));
		}
	}
}